<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">

body { font-family: courier; font-size: 12; }

.code  { font-size: 9; color: #444444; display: none; margin-left: 20px; }
.py_c_api  { color: red; }
.py_macro_api  { color: #FF7000; }
.pyx_c_api  { color: #FF3000; }
.pyx_macro_api  { color: #FF7000; }
.refnanny  { color: #FFA000; }

.error_goto  { color: #FFA000; }

.tag  {  }

.coerce  { color: #008000; border: 1px dotted #008000 }

.py_attr { color: #FF0000; font-weight: bold; }
.c_attr  { color: #0000FF; }

.py_call { color: #FF0000; font-weight: bold; }
.c_call  { color: #0000FF; }

.line { margin: 0em }

</style>
<script>
function toggleDiv(id) {
    theDiv = document.getElementById(id);
    if (theDiv.style.display == 'none') theDiv.style.display = 'block';
    else theDiv.style.display = 'none';
}
</script>
</head>
        <body>
<p>Generated by Cython 0.14.1 on Thu Sep  6 01:11:10 2012
<p>Raw output: <a href="cgaussian.c">cgaussian.c</a>
<pre class='line' style='background-color: #FFFF79' onclick='toggleDiv("line1")'> 1: from __future__ import division</pre>
<pre id='line1' class='code' style='background-color: #FFFF79'>
  /* "pyCloudy/utils/cgaussian.pyx":1
 * from __future__ import division             # <code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code>
 * import numpy as np
 * cimport numpy as np
 */
  __pyx_t_1 = <span class='py_c_api'>PyDict_New</span>();<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(((PyObject *)__pyx_t_1));
  if (<span class='py_c_api'>PyObject_SetAttr</span>(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) <code><</code> 0)<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
</pre><pre class='line' style='background-color: #FFFF8d' onclick='toggleDiv("line2")'> 2: import numpy as np</pre>
<pre id='line2' class='code' style='background-color: #FFFF8d'>
  /* "pyCloudy/utils/cgaussian.pyx":2
 * from __future__ import division
 * import numpy as np             # <code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code>
 * cimport numpy as np
 * 
 */
  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_Import</span>(((PyObject *)__pyx_n_s__numpy), 0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  if (<span class='py_c_api'>PyObject_SetAttr</span>(__pyx_m, __pyx_n_s__np, __pyx_t_1) <code><</code> 0)<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line3")'> 3: cimport numpy as np</pre>
<pre id='line3' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line4")'> 4: </pre>
<pre id='line4' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFF1f' onclick='toggleDiv("line5")'> 5: cpdef np.ndarray gaussian(np.ndarray[double, ndim = 3] x, np.ndarray[double, ndim = 3] zeta_0):</pre>
<pre id='line5' class='code' style='background-color: #FFFF1f'>
/* "pyCloudy/utils/cgaussian.pyx":5
 * cimport numpy as np
 * 
 * cpdef np.ndarray gaussian(np.ndarray[double, ndim = 3] x, np.ndarray[double, ndim = 3] zeta_0):             # <code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code>
 *     """
 *     Return the value of a gaussian function.
 */

static PyObject *__pyx_pf_8pyCloudy_5utils_9cgaussian_gaussian(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static  PyArrayObject *__pyx_f_8pyCloudy_5utils_9cgaussian_gaussian(PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_zeta_0, int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_v_res;
  Py_buffer __pyx_bstruct_x;
  Py_ssize_t __pyx_bstride_0_x = 0;
  Py_ssize_t __pyx_bstride_1_x = 0;
  Py_ssize_t __pyx_bstride_2_x = 0;
  Py_ssize_t __pyx_bshape_0_x = 0;
  Py_ssize_t __pyx_bshape_1_x = 0;
  Py_ssize_t __pyx_bshape_2_x = 0;
  Py_buffer __pyx_bstruct_res;
  Py_ssize_t __pyx_bstride_0_res = 0;
  Py_ssize_t __pyx_bstride_1_res = 0;
  Py_ssize_t __pyx_bstride_2_res = 0;
  Py_ssize_t __pyx_bshape_0_res = 0;
  Py_ssize_t __pyx_bshape_1_res = 0;
  Py_ssize_t __pyx_bshape_2_res = 0;
  Py_buffer __pyx_bstruct_zeta_0;
  Py_ssize_t __pyx_bstride_0_zeta_0 = 0;
  Py_ssize_t __pyx_bstride_1_zeta_0 = 0;
  Py_ssize_t __pyx_bstride_2_zeta_0 = 0;
  Py_ssize_t __pyx_bshape_0_zeta_0 = 0;
  Py_ssize_t __pyx_bshape_1_zeta_0 = 0;
  Py_ssize_t __pyx_bshape_2_zeta_0 = 0;
  PyArrayObject *__pyx_r = NULL;
  <span class='pyx_c_api'><span class='refnanny'>__Pyx_RefNannySetupContext</span></span>("gaussian");
  __pyx_v_res = ((PyArrayObject *)Py_None); <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
  __pyx_bstruct_res.buf = NULL;
  __pyx_bstruct_x.buf = NULL;
  __pyx_bstruct_zeta_0.buf = NULL;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(<span class='pyx_c_api'>__Pyx_GetBufferAndValidate</span>(&__pyx_bstruct_x, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  }
  __pyx_bstride_0_x = __pyx_bstruct_x.strides[0]; __pyx_bstride_1_x = __pyx_bstruct_x.strides[1]; __pyx_bstride_2_x = __pyx_bstruct_x.strides[2];
  __pyx_bshape_0_x = __pyx_bstruct_x.shape[0]; __pyx_bshape_1_x = __pyx_bstruct_x.shape[1]; __pyx_bshape_2_x = __pyx_bstruct_x.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(<span class='pyx_c_api'>__Pyx_GetBufferAndValidate</span>(&__pyx_bstruct_zeta_0, (PyObject*)__pyx_v_zeta_0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  }
  __pyx_bstride_0_zeta_0 = __pyx_bstruct_zeta_0.strides[0]; __pyx_bstride_1_zeta_0 = __pyx_bstruct_zeta_0.strides[1]; __pyx_bstride_2_zeta_0 = __pyx_bstruct_zeta_0.strides[2];
  __pyx_bshape_0_zeta_0 = __pyx_bstruct_zeta_0.shape[0]; __pyx_bshape_1_zeta_0 = __pyx_bstruct_zeta_0.shape[1]; __pyx_bshape_2_zeta_0 = __pyx_bstruct_zeta_0.shape[2];

/* "pyCloudy/utils/cgaussian.pyx":5
 * cimport numpy as np
 * 
 * cpdef np.ndarray gaussian(np.ndarray[double, ndim = 3] x, np.ndarray[double, ndim = 3] zeta_0):             # <code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code>
 *     """
 *     Return the value of a gaussian function.
 */

static PyObject *__pyx_pf_8pyCloudy_5utils_9cgaussian_gaussian(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8pyCloudy_5utils_9cgaussian_gaussian[] = "\n    Return the value of a gaussian function.\n    param:\n        x\n        One of the following parameter must be given:\n        zeta_0, sigma or FWHM\n    ";
static PyObject *__pyx_pf_8pyCloudy_5utils_9cgaussian_gaussian(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_x = 0;
  PyArrayObject *__pyx_v_zeta_0 = 0;
  Py_buffer __pyx_bstruct_x;
  Py_ssize_t __pyx_bstride_0_x = 0;
  Py_ssize_t __pyx_bstride_1_x = 0;
  Py_ssize_t __pyx_bstride_2_x = 0;
  Py_ssize_t __pyx_bshape_0_x = 0;
  Py_ssize_t __pyx_bshape_1_x = 0;
  Py_ssize_t __pyx_bshape_2_x = 0;
  Py_buffer __pyx_bstruct_zeta_0;
  Py_ssize_t __pyx_bstride_0_zeta_0 = 0;
  Py_ssize_t __pyx_bstride_1_zeta_0 = 0;
  Py_ssize_t __pyx_bstride_2_zeta_0 = 0;
  Py_ssize_t __pyx_bshape_0_zeta_0 = 0;
  Py_ssize_t __pyx_bshape_1_zeta_0 = 0;
  Py_ssize_t __pyx_bshape_2_zeta_0 = 0;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__zeta_0,0};
  <span class='pyx_c_api'><span class='refnanny'>__Pyx_RefNannySetupContext</span></span>("gaussian");
  __pyx_self = __pyx_self;
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
    PyObject* values[2] = {0,0};
    switch (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)) {
      case  2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
      case  1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)) {
      case  0:
      values[0] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s__x);
      if (likely(values[0])) kw_args--;
      else goto __pyx_L5_argtuple_error;
      case  1:
      values[1] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s__zeta_0);
      if (likely(values[1])) kw_args--;
      else {
        <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("gaussian", 1, 2, 2, 1);<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L3_error;}</span>
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args), "gaussian") <code><</code> 0))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L3_error;}</span>
    }
    __pyx_v_x = ((PyArrayObject *)values[0]);
    __pyx_v_zeta_0 = ((PyArrayObject *)values[1]);
  } else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 2) {
    goto __pyx_L5_argtuple_error;
  } else {
    __pyx_v_x = ((PyArrayObject *)<span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0));
    __pyx_v_zeta_0 = ((PyArrayObject *)<span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1));
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("gaussian", 1, 2, 2, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args));<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L3_error;}</span>
  __pyx_L3_error:;
  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("pyCloudy.utils.cgaussian.gaussian");
  <span class='pyx_c_api'><span class='refnanny'>__Pyx_RefNannyFinishContext</span></span>();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_bstruct_x.buf = NULL;
  __pyx_bstruct_zeta_0.buf = NULL;
  if (unlikely(!<span class='pyx_c_api'>__Pyx_ArgTypeTest</span>(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0)))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  if (unlikely(!<span class='pyx_c_api'>__Pyx_ArgTypeTest</span>(((PyObject *)__pyx_v_zeta_0), __pyx_ptype_5numpy_ndarray, 1, "zeta_0", 0)))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(<span class='pyx_c_api'>__Pyx_GetBufferAndValidate</span>(&__pyx_bstruct_x, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  }
  __pyx_bstride_0_x = __pyx_bstruct_x.strides[0]; __pyx_bstride_1_x = __pyx_bstruct_x.strides[1]; __pyx_bstride_2_x = __pyx_bstruct_x.strides[2];
  __pyx_bshape_0_x = __pyx_bstruct_x.shape[0]; __pyx_bshape_1_x = __pyx_bstruct_x.shape[1]; __pyx_bshape_2_x = __pyx_bstruct_x.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(<span class='pyx_c_api'>__Pyx_GetBufferAndValidate</span>(&__pyx_bstruct_zeta_0, (PyObject*)__pyx_v_zeta_0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  }
  __pyx_bstride_0_zeta_0 = __pyx_bstruct_zeta_0.strides[0]; __pyx_bstride_1_zeta_0 = __pyx_bstruct_zeta_0.strides[1]; __pyx_bstride_2_zeta_0 = __pyx_bstruct_zeta_0.strides[2];
  __pyx_bshape_0_zeta_0 = __pyx_bstruct_zeta_0.shape[0]; __pyx_bshape_1_zeta_0 = __pyx_bstruct_zeta_0.shape[1]; __pyx_bshape_2_zeta_0 = __pyx_bstruct_zeta_0.shape[2];
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_v_x);
  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_v_zeta_0);
  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2);
  __pyx_t_3 = ((PyObject *)__pyx_f_8pyCloudy_5utils_9cgaussian_gaussian(((PyArrayObject *)__pyx_t_1), ((PyArrayObject *)__pyx_t_2), 0));<span class='error_goto'> if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_3);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    <span class='pyx_c_api'>__Pyx_ErrFetch</span>(&__pyx_type, &__pyx_value, &__pyx_tb);
    <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_x);
    <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_zeta_0);
  <span class='pyx_c_api'>__Pyx_ErrRestore</span>(__pyx_type, __pyx_value, __pyx_tb);}
  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("pyCloudy.utils.cgaussian.gaussian");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_x);
  <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_zeta_0);
  __pyx_L2:;
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_XGIVEREF</span></span>(__pyx_r);
  <span class='pyx_c_api'><span class='refnanny'>__Pyx_RefNannyFinishContext</span></span>();
  return __pyx_r;
}
</pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line6")'> 6:     """</pre>
<pre id='line6' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line7")'> 7:     Return the value of a gaussian function.</pre>
<pre id='line7' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line8")'> 8:     param:</pre>
<pre id='line8' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line9")'> 9:         x</pre>
<pre id='line9' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line10")'> 10:         One of the following parameter must be given:</pre>
<pre id='line10' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line11")'> 11:         zeta_0, sigma or FWHM</pre>
<pre id='line11' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line12")'> 12:     """</pre>
<pre id='line12' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFFff' onclick='toggleDiv("line13")'> 13:     cdef np.ndarray[double, ndim = 3] res</pre>
<pre id='line13' class='code' style='background-color: #FFFFff'></pre><pre class='line' style='background-color: #FFFF16' onclick='toggleDiv("line14")'> 14:     res = np.exp(-((x/zeta_0)**2)) /zeta_0 / np.sqrt(np.pi)</pre>
<pre id='line14' class='code' style='background-color: #FFFF16'>
  /* "pyCloudy/utils/cgaussian.pyx":14
 *     """
 *     cdef np.ndarray[double, ndim = 3] res
 *     res = np.exp(-((x/zeta_0)**2)) /zeta_0 / np.sqrt(np.pi)             # <code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code>
 *     return res
 */
  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetName</span>(__pyx_m, __pyx_n_s__np);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  __pyx_t_2 = <span class='py_c_api'>PyObject_GetAttr</span>(__pyx_t_1, __pyx_n_s__exp);<span class='error_goto'> if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_2);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_<span class='py_c_api'>PyNumber_Divide</span>(((PyObject *)__pyx_v_x), ((PyObject *)__pyx_v_zeta_0));<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  __pyx_t_3 = <span class='py_c_api'>PyNumber_Power</span>(__pyx_t_1, __pyx_int_2, Py_None);<span class='error_goto'> if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_3);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = <span class='py_c_api'>PyNumber_Negative</span>(__pyx_t_3);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(((PyObject *)__pyx_t_3));
  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0, __pyx_t_1);
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GIVEREF</span></span>(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = <span class='py_c_api'>PyObject_Call</span>(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_<span class='py_c_api'>PyNumber_Divide</span>(__pyx_t_1, ((PyObject *)__pyx_v_zeta_0));<span class='error_goto'> if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_3);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetName</span>(__pyx_m, __pyx_n_s__np);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  __pyx_t_2 = <span class='py_c_api'>PyObject_GetAttr</span>(__pyx_t_1, __pyx_n_s__sqrt);<span class='error_goto'> if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_2);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetName</span>(__pyx_m, __pyx_n_s__np);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  __pyx_t_4 = <span class='py_c_api'>PyObject_GetAttr</span>(__pyx_t_1, __pyx_n_s__pi);<span class='error_goto'> if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_4);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(((PyObject *)__pyx_t_1));
  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_t_4);
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GIVEREF</span></span>(__pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = <span class='py_c_api'>PyObject_Call</span>(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL);<span class='error_goto'> if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_4);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_<span class='py_c_api'>PyNumber_Divide</span>(__pyx_t_3, __pyx_t_4);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_GOTREF</span></span>(__pyx_t_1);
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_1, __pyx_ptype_5numpy_ndarray)))))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  __pyx_t_5 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_res);
    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetBufferAndValidate</span>(&__pyx_bstruct_res, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
    if (unlikely(__pyx_t_6 <code><</code> 0)) {
      <span class='py_c_api'>PyErr_Fetch</span>(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
      if (unlikely(<span class='pyx_c_api'>__Pyx_GetBufferAndValidate</span>(&__pyx_bstruct_res, (PyObject*)__pyx_v_res, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
        <span class='pyx_c_api'>__Pyx_RaiseBufferFallbackError</span>();
      } else {
        <span class='py_c_api'>PyErr_Restore</span>(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      }
    }
    __pyx_bstride_0_res = __pyx_bstruct_res.strides[0]; __pyx_bstride_1_res = __pyx_bstruct_res.strides[1]; __pyx_bstride_2_res = __pyx_bstruct_res.strides[2];
    __pyx_bshape_0_res = __pyx_bstruct_res.shape[0]; __pyx_bshape_1_res = __pyx_bstruct_res.shape[1]; __pyx_bshape_2_res = __pyx_bstruct_res.shape[2];
    if (unlikely(__pyx_t_6 <code><</code> 0))<span class='error_goto'> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span>
  }
  __pyx_t_5 = 0;
  <span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_v_res));
  __pyx_v_res = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
</pre><pre class='line' style='background-color: #FFFF44' onclick='toggleDiv("line15")'> 15:     return res</pre>
<pre id='line15' class='code' style='background-color: #FFFF44'>
  /* "pyCloudy/utils/cgaussian.pyx":15
 *     cdef np.ndarray[double, ndim = 3] res
 *     res = np.exp(-((x/zeta_0)**2)) /zeta_0 / np.sqrt(np.pi)
 *     return res             # <code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code><code><</code>
 */
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(((PyObject *)__pyx_r));
  <span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_res));
  __pyx_r = ((PyArrayObject *)__pyx_v_res);
  goto __pyx_L0;

  __pyx_r = ((PyArrayObject *)Py_None); <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    <span class='pyx_c_api'>__Pyx_ErrFetch</span>(&__pyx_type, &__pyx_value, &__pyx_tb);
    <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_x);
    <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_res);
    <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_zeta_0);
  <span class='pyx_c_api'>__Pyx_ErrRestore</span>(__pyx_type, __pyx_value, __pyx_tb);}
  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("pyCloudy.utils.cgaussian.gaussian");
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_x);
  <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_res);
  <span class='pyx_c_api'>__Pyx_SafeReleaseBuffer</span>(&__pyx_bstruct_zeta_0);
  __pyx_L2:;
  <span class='pyx_macro_api'>__Pyx_DECREF</span>((PyObject *)__pyx_v_res);
  <span class='pyx_macro_api'><span class='refnanny'>__Pyx_XGIVEREF</span></span>((PyObject *)__pyx_r);
  <span class='pyx_c_api'><span class='refnanny'>__Pyx_RefNannyFinishContext</span></span>();
  return __pyx_r;
}
</pre></body></html>
